package secondweek.six;

import org.junit.Test;

import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * Created by zhourui on 2016/8/11.
 * 用FileChannel的方式实现第四题，注意编码转换问题，并对比性能
 */
public class FileChannelTest {
    /**
     * FileChannel是用于读取、写入、映射和操作文件的通道。
     *
     *文件通道在其文件中有一个当前 position，可对其进行查询和修改。
     *该文件本身包含一个可读写的长度可变的字节序列，并且可以查询该文件的当前大小。
     *写入的字节超出文件的当前大小时，则增加文件的大小；截取 该文件时，则减小文件的大小。
     */
    @Test
    public void test() throws IOException {
        File in = new File("D:\\in.txt");
        File out = new File("D:\\out.txt");
        if(in.createNewFile()){
            System.out.println("in.txt被创建");
            FileOutputStream is = new FileOutputStream(in);
            byte[] b = "我一定能行的".getBytes();
            is.write(b, 0, b.length);
        }
        if(out.createNewFile()){
            System.out.println("out.txt被创建");
        }
        FileInputStream is = new FileInputStream(in);
        FileOutputStream os = new FileOutputStream(out);
        FileChannel fis = is.getChannel();
        FileChannel fos = os.getChannel();
        ByteBuffer bytedata = ByteBuffer.allocate(100);
        while(fis.read(bytedata)!= -1){
            //通过通道读写交叉进行。
            bytedata.flip();
            fos.write(bytedata);
            bytedata.clear();
        }
        fis.close();
        fos.close();
        is.close();
        os.close();
    }
}
